1. The Field of the Invention
The present invention relates to network communication technology, and more specifically, to mechanisms for waking a link layer based on data contained in a network packet.
2. Background and Relevant Art
Computer systems and related technology, such as, for example, consumer electronic devices, affect many aspects of society. Indeed, the computer system's ability to process information has transformed the way we live and work. Computer systems now commonly perform a host of tasks (e.g., word processing, scheduling, and database management) that prior to the advent of the computer system were performed manually. More recently, computer systems have been coupled to one another and to other electronic devices to form both wired and wireless computer networks over which the computer systems and other electronic devices can transfer electronic data. As a result, many tasks performed at a computer system (e.g., voice communication, accessing electronic mail, controlling home electronics, web browsing) include electronic communication with one or more other computer systems or other electronic devices via wired and/or wireless computer networks.
When computer systems communicate electronically, electronic data will often pass through a protocol stack that performs operations on the electronic data (e.g., packetizing, routing, flow control). The Open System Interconnect (“OSI”) model is an example of a networking framework for implementing a protocol stack. The OSI model breaks down the operations for transferring electronic data into seven distinct “layers,” each designated to perform certain operations in the data transfer process. While protocol stacks can potentially implement each of the layers, many protocol stacks implement only selective layers for use in transferring electronic data across a network.
When data is received from a network it enters the physical layer and is passed up to higher intermediate layers and then eventually received at an application layer. The physical layer, the lower most layer, is responsible for converting electrical impulses, light, or radio waves into a bit stream and vice versa. On the other hand, when data is transmitted from a computing system, it originates at the application layer and is passed down to intermediate lower layers and then onto a network. The application layer, the upper most layer, is responsible for supporting applications and end-user processes, such as, for example, electronic conferencing software, electronic mail clients, web browsers, etc.
An intermediate layer incorporated by most protocol stacks is the Link layer. The Link layer is typically a layer that is situated immediately above the physical layer in a protocol stack. The Link layer decodes data packets (received from higher layers) into bit streams for use by the physical layer and encodes bit streams (received from the physical layer) into data packets for use by higher layers. One particular standard for implementing a physical layer and corresponding link layer is the Institute of Electrical and Electronics Engineers (“IEEE”) 1394 external bus standard (often referred to as “FireWire”). IEEE 1394 can be used to couple consumer electronic devices, such as, for example, digital video camera, set-top boxes, etc., and computer systems (hereinafter collectively referred to as “1394 devices”) to one another to facilitate the exchange of electronic data. Networks based on the IEEE 1394 standard have relatively high data transfer rates (up to 800 Megabits per second) and can deliver data isochronously. These characteristics make IEEE 1394 well suited for delivering real-time audio/video data that require synchronization between audio and video channels.
Many 1394 devices can also be configured to transition into a low power mode (or sleep mode) to conserve power resources. Transitioning into low power mode can occur after a specified time period of inactivity or as the result of receiving an appropriate command. When a 1394 device is operating in low power mode, the physical layer at the 1394 device may exchange timing data (e.g., electrical signaling) with physical layers at other 1394 devices connected to a common network. However, when operating in low power mode the link layer is essentially inactive and the physical layer does not exchange data with the link layer. When a packet is received, the 1394 device checks the packet to determine whether the packet is a physical layer packet (often referred to as a “PHY packet”) or a primary packet (a packet containing data for upper layers of a corresponding protocol stack). However, aside from determining whether a packet is a PHY packet or a primary packet, the physical layer typically includes little, if any, ability to parse data contained in a received packet.
When the physical layer determines that a received packet is a primary packet, the packet is discarded. This conserves energy since the upper layers do not process data contained in the primary packet. Unfortunately, there is always some chance that a received primary packet contains data directed to the upper layers of the corresponding protocol stack. For example, a primary packet may contain data for a user-interface at a 1394 device that is operating in a low power mode. However, since the physical layer discards the primary packet, the upper layers never receive the data contained in the primary packet.
A 1394 device can transition out of a low power mode as a result of local input received at the 1394 device. For example, a user of a 1394 VCR device can operate the controls of the 1394 VCR device (e.g., pressing the play button) to transition the 1394 VCR device out of a low power mode. A 1394 device can also transition out of a low power mode in response to receiving a wake packet. A wake packet is a special PHY packet that indicates to the physical layer that the physical layer should activate the link layer. When the physical layer receives a wake packet, the physical layer wakes the link layer (e.g., asserting a LINK_ON signal to the link layer and a PME# signal to PCI Bus), from the low power state.
A device manager at one of the 1394 devices connected to a network can manage when wake packets are sent to other 1394 devices. For example, when a first 1394 device is to send a network packet to second 1394 device, the device manager sends a special wake packet to the second 1394 device to activate the link layer at the second 1394 device. When the network packet is received at the second 1394 device, the physical layer determines that the received network packet is a network packet and that the link layer is active. Accordingly, the physical layer transfers the data packet to the link layer. However, there is always some chance that a device manager will malfunction or will otherwise fail to appropriately supply a wake packet to a 1394 device operating in a low power mode. Accordingly, systems, methods, and computer program products for waking a link layer based on data contained in a primary packet would be advantageous.